// vuex模块，用户数据
// 解构ajax接口函数
import { checkLoginReq, getUserInfoReq } from '@/api/user'

const state = {
    // 初始化，从本地拉取数据赋值给vuex
    token: localStorage.getItem('t_k'),
    role: localStorage.getItem('role'),
    userInfo: {}
}
const getters = {}
const mutations = {
    SET_TOKEN(state, data) {
        // token存vuex
        state.token = data
        // token存入本地
        localStorage.setItem('t_k', data)
    },
    SET_ROLE(state, data) {
        state.role = data
        // 将role存入本地
        localStorage.setItem('role', data)
    },
    SET_USERINFO(state, data) {
        state.userInfo = data
    },

    // 清空
    CLEAR(state){
        // 清空vuex里面的数据
        state.userInfo={}
        state.token=''
        state.role=''
        // 清空本地
        localStorage.clear()
    }
}
// 异步方法
const actions = {
    // 发送请求
    A_login({ commit }, data) {
        // 凡是actions里面有异步，必须包一层promise壳子
        return new Promise((async resolve => {
            let res = await checkLoginReq(data)
            // 解构数据
            let { code, msg, token, role } = res.data
            // 判断
            if (code === 0) {
                commit('SET_TOKEN', 'Bearer ' + token)
                commit('SET_ROLE', role)

                // 切换Promise状态为已成功
                resolve()

            }
        }))


    },

    // 获取用户信息
    A_getUserInfo({ commit }) {
        return new Promise(async resolve => {
            // 发送请求
            let res = await getUserInfoReq()
            // 调用同步方法，将数据存储到vuex中
            commit('SET_USERINFO', res.data)
            resolve()
        })
    },

    // 清空
    A_clear({commit}){
            return new Promise(resolve=>{
                commit('CLEAR')
                resolve()
            })
    }

}

export default {
    namespaced: true,
    state,
    getters,
    mutations,
    actions
}